#include <stdio.h>
#include <malloc.h>
#include "HEAD/intArray.h"
#define MAXSIZE 1024
typedef int elementype;
typedef struct sequenlist
{
   elementype data[MAXSIZE];
   int last;

} Sequenlist;

// 初始化
Sequenlist *Init_SequenList()
{
   Sequenlist *L;
   L = (Sequenlist *)malloc(sizeof(Sequenlist));
   if (L != NULL)
   {
      L->last = -1;
   }

   return L;
}

// 顺序表的长度
int SequenList_Length(Sequenlist *L)
{
   return (L->last + 1);
}

// 顺序表的插入
int Insert_SequenList(Sequenlist *L, elementype x, int position)
{

   if (L->last >= MAXSIZE - 1) // 检查顺序表是否已满
   {
      return 0;
   }

   if (position < 1 || position > L->last + 2)
   {
      return -1; // 检查插入位置有效性
   }

   for (int i = position; i < L->last + 1; i++)
   {
      L->data[i] = L->data[i + 1];
   }
   L->data[position - 1] = x;
   L->last++;

   return 1;
}

int Delete_SequenList(Sequenlist *L, int i)
{
   int j;
   if (i < 1 || i > L->last + 2)
   {
      return -1; // 检查插入位置有效性
   }
   else
   {
      for (j = i; j <= L->last; j++)
         L->data[j - 1] = L->data[j];
      L->last--;
   }
}

int Copy_SequenList(Sequenlist *L, int *original, int length)
{
   intcpy(L->data, original, length, 0);
   L->last = length - 1;
   return 1;
}

int Search_SequenList(Sequenlist *L, elementype key)
{
   for (size_t i = 0; i < L->last + 2; i++)
   {
      if (L->data[i] == key)
      {
         return i + 1;
      }
   }

   return 0;
}

int GetData_SequenList(Sequenlist *L, int i)
{
   if (i < 1 || i > L->last + 2)
   {
      return 0; // 检查插入位置有效性
   }
   else
   {
      return L->data[i - 1];
   }
}

int Print_SequenList(Sequenlist *L)
{
   int i;
   if (L->last == -1)
   {
      return 0;
   }
   for (size_t i = 0; i < L->last + 1; i++)
   {
      printf("List[%d]  = %4d\t", i + 1, L->data[i]);
      if ((i + 1) % 5 == 0)
         printf("\n");
   }

   return 1;
}

int main()
{
   Sequenlist *l = Init_SequenList();
   int data[5] = {10, 2, 3, 7, 50};
   Copy_SequenList(l, data, sizeof(data) / 4);
   Print_SequenList(l);
   putchar('\n');

   // 测试删除
   Delete_SequenList(l,3);
   Print_SequenList(l);
   putchar('\n');

   // 测试插入
   Insert_SequenList(l,99,3);
   Print_SequenList(l);
   putchar('\n');

   // 测试获取
   int num = GetData_SequenList(l,3);
   printf("%d\n", num);
}
